home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Just Call Me Internet
/
Just Call Me Internet.iso
/
prog
/
atari
/
c
/
stut_src
/
ecri_msg.c
< prev
next >
Wrap
C/C++ Source or Header
|
1996-05-27
|
10KB
|
418 lines
/*
* ecri_msg.c
*
* Purpose:
* --------
* ecriture des messages d'une rubrique
*
* History:
* --------
* 21.01.95: fplanque: Created
*/
#include "!OPTIONS.H" /* Options de compilation */
#define THIS_FILE "ECRI_MSG.C v1.00 - 03.95"
/*
* System headers:
*/
#include <stdio.h> /* header standard */
#include <string.h> /* header tt de chaines */
/*
* Custom headers:
*/
#include "SPEC_PU.H"
#include "S_MALLOC.H"
#include "DEF_ARBO.H"
#include "DATPG_PU.H"
#include "DBSYS_PU.H"
#include "DEBUG_PU.H"
#include "LISTS_PU.H"
#include "SERV_PU.H"
#include "LINE0_PU.H"
#include "DBINT_PU.H"
#include "IOFLD_PU.H"
#include "GENRC_PU.H"
#include "TERM_PU.H"
#include "TEXT_PU.H"
#include "SERCOMPU.H"
static void Record_MessageToDB(
VOIE * pVoie_curr,
BOOL b_Private ); /* In: !=0 si le message est priv */
/*
* --------------------------- METHODES -------------------------------
*/
/*
* EcriMsg_ENPG(-)
*
* Purpose:
* --------
* Traitrement des initialisations ENTER PAGE
*
* History:
* --------
* 21.01.95: fplanque: Created
*/
void EcriMsg_ENPG(
VOIE * pVoie_curr ) /* In: Voie concerne */
{
/*
* Ouvre base de donnes:
*/
register_action( pVoie_curr, OPDB, FB_RUB, 0, NULL );
/*
* Affiche donnes
*/
register_action( pVoie_curr, DDAT, 0, 0, NULL );
}
/*
* EcriMsg_DispData(-)
*
* Purpose:
* --------
* Affiche les donnes initiales l'cran:
*
* Notes:
* ------
* Ceci n'est normalement xcut qu'une seule fois l'entre de la page
*
* History:
* --------
* 10.01.95: fplanque: Created based on LectMsg_DispData()
* 24.01.95: appel de OutFields_DisplayGroup()
*/
void EcriMsg_DispData(
VOIE * pVoie_curr ) /* In: Voie concerne */
{
/*
* Affichage champs groupe 1 (commentaire...):
*/
OutFields_DisplayGroup( pVoie_curr, 1, 0, 0 );
}
/*
* keyaction_ecri_msg(-)
*
* Purpose:
* --------
* Ragit la touche press sur une page d'ECRITURE
*
* History:
* --------
* 1993: fplanque: Created
* 27.11.94: fplanque: gestion du champ TITLE
* 05.12.94: utilise Move_FocusTo...
* 09.12.94: envoi peut valider depuis n'importe kel champ, gestion suite/retour normal
* 13.12.94: prise en compte de Private
*/
void keyaction_ecri_msg(
KEYCODE curr_keypress, /* In: touche presse */
VOIE * pVoie_curr ) /* In: voie concerne */
{
switch( curr_keypress )
{
case KEY_ENVOI:
{
BOOL b_Private = FALSE0; /* Par dfaut, le message est public */
const char * cpsz_PublicPrivate;
/*
* Vrifie si le mec tape un mot clef:
*/
if( serv_handleKeyword( pVoie_curr, '*' ) )
{
break;
}
/*
* On a pas tap un mot clef:
* On traite envoi comme une validation du msg:
* Controle si on peut enregistrer:
*/
if( pVoie_curr -> nb_records >= 1 ) /* Limite 1 enregistrement */
{ /*
* Enregistrement impossible:
*/
aff_msg_l0( pVoie_curr, "Duplicata interdit!" );
break;
}
/*
* Vrifie si les champs sont correctement remplis:
*/
if( ! validate_InFields( pVoie_curr ) )
{
break;
}
/*
* Dtermine si le message est priv:
*/
cpsz_PublicPrivate = aim_InField( pVoie_curr, FEI_PUBPRIV );
if( cpsz_PublicPrivate != NULL && (cpsz_PublicPrivate[0] == 'V' || cpsz_PublicPrivate[0] == 'v'))
{ /*
* Le message est priv:
*/
const char * cpsz_Destinataire;
b_Private = TRUE_1;
/*
* On vrifie qu'on a spcifi un destinataire:
*/
cpsz_Destinataire = aim_InField( pVoie_curr, FEI_DEST );
if( cpsz_Destinataire == NULL || cpsz_Destinataire[0] == '\0' )
{ /*
* Message priv sans destinataire:
*/
aff_msg_l0( pVoie_curr, "Msg Priv sans Destinataire!" );
Move_FocusToInField_byFnct( pVoie_curr, FEI_DEST, FEI_DEST );
break;
}
}
/*
* On va enregister:
*/
affiche_touche( pVoie_curr, curr_keypress ); /* Affiche nom de la touche */
add_textinf( pVoie_curr -> wi_params, " Enregistrement du message" );
aff_msg_l0( pVoie_curr, "Enregistrement du message." );
/*
* ----------------------------------
* Enregistrement des champs dites:
* ----------------------------------
*/
Record_MessageToDB( pVoie_curr, b_Private );
/*
* Demande Changement de page:
*/
follow_KeyArboLink( pVoie_curr, curr_keypress );
}
break;
case KEY_SUITE:
Move_FocusToNextInField( pVoie_curr );
break;
case KEY_RETOUR:
Move_FocusToPrevInField( pVoie_curr );
break;
case KEY_GUIDE:
/*
* test:
*/
/* InField_Clear( pVoie_curr, pVoie_curr -> pIOField_CurrIn ); */
case KEY_REPET:
case KEY_SOMM:
affiche_touche( pVoie_curr, curr_keypress ); /* Affiche nom de la touche */
/*
* Demande Changement de page:
*/
follow_KeyArboLink( pVoie_curr, curr_keypress );
break;
}
}
/*
* Record_MessageToDB(-)
*
* Purpose:
* --------
* Enregistrement un message dit
* ex: message en rubrique
* Gnralement aprs appui sur ENVOI!
*
* Algorythm:
* ----------
*
* Notes:
* ------
*
* History:
* --------
* 1993: fplanque: Created
* 17.05.94: fplanque: initialise Locks lors de la cration du message
* 16.11.94: ajoute du champ MPSE
* 18.11.94: DSTA prend nom de la rub comme destinataire
* 29.11.94: nouveau systeme de cration de fields
* 01.12.94: cration titre
* 14.12.94 gestion d'un destinataire particulier
*/
void Record_MessageToDB(
VOIE * pVoie_curr,
BOOL b_Private ) /* In: !=0 si le message est priv */
{
IOFIELD * pInField;
RECORD_FIELD * pListElt_First;
RECORD_FIELD * pListElt_New;
RECORD_FIELD * pListElt_Prev = NULL;
COMPACT_RECORD * pCompRec; /* Message compact */
DATAPAGE * pDataPage_DB = pVoie_curr -> database; /* Base de donnes concerne */
char * pisz_tmp;
/*
* +---------------------------------------------------+
* | Cration des champs du message en liste chaine |
* +---------------------------------------------------+
* ----
* HEAD
* ----
*/
pListElt_New = Create_HeaderFld( &G_RecNb_Null, b_Private );
pListElt_Prev = Append_ToSingleLinkList( pListElt_Prev, pListElt_New );
pListElt_First = pListElt_Prev;
/*
* ----
* DSTA
* ----
*/
strcpy( G_tmp_buffer, "ALL" ); /* Par dfaut */
if( get_InFieldPars( pVoie_curr, FEI_DEST, &pInField ) == FLD_READY )
{ /*
* Le message est adress une personne en particulier:
*/
char * pMsz_Dest;
compact_text( pInField -> pTextInfo -> firstline -> next, FMTMODE_SGLETEXTLINE, &pMsz_Dest );
if( pMsz_Dest[0] != '\0' )
{ /*
* Si un destinataire a t spcifi:
*/
strcpy( G_tmp_buffer, pMsz_Dest );
}
FREE( pMsz_Dest );
}
strcat( G_tmp_buffer, "@" );
strcat( G_tmp_buffer, pDataPage_DB -> nom ); /* Nom de la rubrique */
pisz_tmp = strBchr( G_tmp_buffer, '.' );
if( pisz_tmp != NULL )
{ /*
* Efface l'extension ( partir du point)
*/
*pisz_tmp = '\0';
}
strcat( G_tmp_buffer, ".RUB.LOCAL" ); /* Localisation */
/*
* Cre champ DSTA:
*/
pListElt_New = Create_SimpleRecFld( 'DSTA', G_tmp_buffer );
pListElt_Prev = Append_ToSingleLinkList( pListElt_Prev, pListElt_New );
/*
* ----
* MPSE
* CTCA
* ----
*/
if( pVoie_curr -> pMsz_Login != NULL )
{
pListElt_New = Create_SimpleRecFld( 'MPSE', pVoie_curr -> pMsz_Login );
pListElt_Prev = Append_ToSingleLinkList( pListElt_Prev, pListElt_New );
pListElt_New = Create_SimpleRecFld( 'CTCA', pVoie_curr -> pMsz_Login );
pListElt_Prev = Append_ToSingleLinkList( pListElt_Prev, pListElt_New );
}
/*
* ----
* MTIT
* ----
*/
if( get_InFieldPars( pVoie_curr, FEI_TITLE, &pInField ) == FLD_READY )
{
pListElt_New = Create_TextRecFld( 'MTIT', pInField );
pListElt_Prev = Append_ToSingleLinkList( pListElt_Prev, pListElt_New );
}
/*
* ----
* MTXT
* ----
* Trouve 1ere ligne du texte
*/
if( get_InFieldPars( pVoie_curr, FEI_TEXT, &pInField ) == FLD_READY )
{
pListElt_New = Create_TextRecFld( 'MTXT', pInField );
pListElt_Prev = Append_ToSingleLinkList( pListElt_Prev, pListElt_New );
}
/*
* ----
* FOOT
* ----
*/
pListElt_New = Create_FooterFld( );
pListElt_Prev = Append_ToSingleLinkList( pListElt_Prev, pListElt_New );
/*
* +----------------------------------+
* | Composition du message complet |
* +----------------------------------+
*/
pCompRec = Create_CompactRecord( pListElt_First );
/*
* +------------------------------------+
* | Libre liste de champs temporaires |
* +------------------------------------+
*/
pListElt_New = pListElt_First;
while( pListElt_New != NULL )
{
pListElt_Prev = pListElt_New;
pListElt_New = pListElt_New -> next;
FREE( pListElt_Prev -> info.string );
FREE( pListElt_Prev );
}
/*
* +----------------------------------------------------+
* | Insertion de ce message dans la base de donnes: |
* +----------------------------------------------------+
*/
DBInt_AppendCompRecToDB( pVoie_curr, pCompRec, pDataPage_DB );
/*
* Un enregistrement de plus d'effectu sur cette page arbo:
*/
pVoie_curr -> nb_records ++ ;
}